package cn.iocoder.yudao.module.system.service.lottery;

import cn.iocoder.yudao.module.system.controller.admin.lottery.vo.LotteryRespVO;
import cn.iocoder.yudao.module.system.controller.admin.lottery.vo.LotteryRecordRespVO;
import cn.iocoder.yudao.module.system.dal.dataobject.lottery.LotteryRecordDO;

import java.util.List;

/**
 * 抽奖 Service 接口
 *
 * @author 芋道源码
 */
public interface LotteryService {

    /**
     * 用户抽奖
     *
     * @param userId 用户ID
     * @return 抽奖结果
     */
    LotteryRespVO drawLottery(Long userId);

    /**
     * 获取用户抽奖记录
     *
     * @param userId 用户ID
     * @return 抽奖记录列表
     */
    List<LotteryRecordRespVO> getUserLotteryRecords(Long userId);

    /**
     * 检查用户今日是否还能抽奖
     *
     * @param userId 用户ID
     * @return 是否能抽奖
     */
    boolean canDrawLottery(Long userId);

    /**
     * 获取用户今日剩余抽奖次数
     *
     * @param userId 用户ID
     * @return 剩余次数
     */
    int getRemainingLotteryCount(Long userId);

    /**
     * 获取全套奖励详情
     *
     * @param hasProfessionalReportStock 是否有专业版报告库存
     * @return 全套奖励包含的奖品列表
     */
    String getFullPackageDescription(boolean hasProfessionalReportStock);

    /**
     * 完成分享任务获取抽奖次数
     *
     * @param userId 用户ID
     * @return 是否成功获取抽奖次数
     */
    boolean completeShareTaskForLottery(Long userId);

    /**
     * 完成邀请好友任务获取抽奖次数
     *
     * @param userId 用户ID
     * @return 是否成功获取抽奖次数
     */
    boolean completeInviteFriendTaskForLottery(Long userId);

    /**
     * 完成个人信息完善任务获取抽奖次数
     *
     * @param userId 用户ID
     * @return 是否成功获取抽奖次数
     */
    boolean completeProfileTaskForLottery(Long userId);
}
